package com.hanzidong.controller;

import java.util.Date;
import java.util.List;

import javax.servlet.http.HttpSession;
import javax.validation.Valid;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.hanzidong.bean.User;
import com.hanzidong.service.UserService;
import com.hanzidong.util.MD5Util;

@Controller
@RequestMapping("user")
public class UserController {

	@Autowired
	private UserService userService;
	
	/**
	 * 跳转到注册页面
	 * @param m
	 * @return
	 */
	@RequestMapping("toRegister")
	public String toRegister(Model m) {
		
		//将对象传入到jsp页面
		m.addAttribute("user", new User());
		
		return "user/register";
	}
	
	/**
	 * 检查用户名是否重复
	 * @param user
	 * @return
	 */
	@RequestMapping("checkUsername")
	@ResponseBody
	public boolean checkUsername(User user) {
		
		//将结果默认值设置为true
		boolean result = true;
		
		//根据用户名进行校验
		List<User> list = userService.checkUsername(user);
		
		if(list == null || list.size() == 0) {
			//如果为空，则代表没有该用户，即可以进行注册
			result = false;
		}
		
		
		return result;
	}
	
	/**
	 * 注册
	 * @param user
	 * @param result
	 * @return
	 */
	@RequestMapping("register")
	public String register(@Valid @ModelAttribute("user") User user,BindingResult result) {
		//进行校验判断
		if(result.hasErrors()) {
			
			return "/user/register";
		}
		
		//设置用户的其他数据
		user.setCreated(new Date());//创建日期
		user.setLocked(0);//正常的
		user.setRole(0);//普通用户
		
		//将密码进行md5加密
		user.setPassword(MD5Util.md5(user.getPassword()));
		
		//注册操作
		userService.register(user);
		
		return "redirect:/user/toLogin";
	}
	
	/**
	 * 跳转到登录页面
	 * @param m
	 * @return
	 */
	@RequestMapping("toLogin")
	public String toLogin(Model m) {
		
		//将对象传入到jsp页面
		m.addAttribute("user", new User());
		
		return "user/login";
	}
	
	/**
	 * 使用ajax进行登录操作
	 * @param user
	 * @return
	 */
	@RequestMapping("login")
	@ResponseBody
	public boolean login(User user,HttpSession session) {
		
		//将密码进行md5加密
		user.setPassword(MD5Util.md5(user.getPassword()));
		
		//登录操作
		User login_user = userService.login(user);
		
		//判断是否有值
		if(login_user != null) {
			//将登录用户信息存入到session中
			session.setAttribute("LOGIN_USER", login_user);
			
			return true; 
		}
		
		return false;
	}
	
	/**
	 * 注销操作
	 * @param session
	 * @return
	 */
	@RequestMapping("logout")
	public String logout(HttpSession session) {
		
		//清空session
		session.invalidate();
		
		return "redirect:/";
	}
}


